#!/usr/bin/python # -*- coding: GBK -*- #×÷Õß : eggxp import CommFunc import Log4P import binascii # # class tagHead: Cmd = None # (BYTE Cmd ) SubCmd = None # (BYTE SubCmd ) def __init__(self): self.Clear() return def ReadData(self, _lpData, _Len=0): self.Clear() pos = 0 self.Cmd, pos = CommFunc.ReadBYTE(_lpData, pos) self.SubCmd, pos = CommFunc.ReadBYTE(_lpData, pos) if _Len != 0 and pos != _Len: Log4P.Warn("Error in tagHead : %s "% binascii.b2a_hex(_lpData)) return 0 return pos def Clear(self): self.Cmd = 0 self.SubCmd = 0 return def GetLength(self): length = 0 length += 1 length += 1 return length; def GetBuffer(self): data = '' data = CommFunc.WriteBYTE(data, self.Cmd) data = CommFunc.WriteBYTE(data, self.SubCmd) return data def OutputString(self): DumpString = (": " "Cmd:%d," "SubCmd:%d" %( self.Cmd, self.SubCmd ) ) return DumpString # //01 02 Íæ¼Ò³õʼ»¯#tagCDBPlayer # class tagCDBPlayer: Head = tagHead() # (tagHead Head ) AccID = "" # (char AccID[15] ) //ÕʺÅÃû, ¸Ã½ÇÉ«ËùÔÚµÄÕʺŵÄÓû§Ãû PlayerID = 0 # (DWORD PlayerID ) PlayerName = "" # (char PlayerName[15] ) //size = 14 AccState = 0 # (BYTE AccState ) //0: δ´´½¨, 1: ´´½¨OK,Õý³£µÇ¼ 2:·âºÅ 3:ÒÑɾ³ý GMLevel = 0 # (BYTE GMLevel ) //GMµÈ¼¶, 0:²»ÊÇGM >=1 : GMµÄµÈ¼¶ Sex = 0 # (DWORD Sex ) //ÐÔ±ð Hair = 0 # (DWORD Hair ) //·¢ÐÍ, 1.±ê×¼ÐÍ£¨ÄУ© 2.ÃûÊËÐÍ 3.ÀË×ÓÐÍ 4.±ê×¼ÐÍ£¨Å®£© 5.Âí÷ÙÐÍ 6.åüÃÄÐÍ HairColor = 0 # (DWORD HairColor ) //Í··¢ÑÕÉ«, 5ÖÖ Face = 0 # (DWORD Face ) //»ù±¾Á³ÐÍ Job = 0 # (int Job ) //Ö°Òµ, 0.ÐÂÊÖ 1.ÓÎÏÀ 2.սʿ 3.¹­¼ýÊÖ 4.ÊõÊ¿ 5.µÀÊ¿ LV = 0 # (int LV ) //µÈ¼¶ TotalExp = 0 # (DWORD TotalExp ) //×ܾ­Ñé Family = 0 # (DWORD Family ) //¼Ò×å Country = 0 # (int Country ) //¹ú¼Ò, 0.ÇØ¹ú 1.κ¹ú 2.³þ¹ú ÕóÓª HornorKill = 0 # (int HornorKill ) //ÈÙÓþ»÷ɱ Hornor = 0 # (int Hornor ) //ÈÙÒ«Öµ HornorInFamily = 0 # (int HornorInFamily ) //¼Ò×å¹±Ï×¶È HornorInCountry = 0 # (int HornorInCountry ) //¹ú¼Ò¹±Ï×¶È Mate = 0 # (DWORD Mate ) Gold = 0 # (DWORD Gold ) //½ð×Ó GoldPaper = 0 # (DWORD GoldPaper ) //½ðƱ Silver = 0 # (DWORD Silver ) //Òø×Ó SilverPaper = 0 # (DWORD SilverPaper ) //񿮱 FightPoint = 0 # (DWORD FightPoint ) //Õ½¶·Öµ HappyPoint = 0 # (DWORD HappyPoint ) //ÓéÀÖÖµ MapID = 0 # (DWORD MapID ) //½ÇÉ«ËùÔÚµØÍ¼ PosX = 0 # (DWORD PosX ) //½Çɫ׸±ê PosY = 0 # (DWORD PosY ) State = 0 # (int State ) //½Çɫ״̬ 1.·â´æ 2.ËÀÍö 3.Õý³£ ÒÔºó»¹ÓÐÂ½ÐøÌí¼Ó HP = 0 # (DWORD HP ) //µ±Ç°HP MP = 0 # (DWORD MP ) //µ±Ç°MP HPRestoreSetting = 0 # (WORD HPRestoreSetting ) //ÉÙÓÚÕâ¸öÖµ%×Ô¶¯ºÈѪ MPRestoreSetting = 0 # (WORD MPRestoreSetting ) //ÉÙÓÚÕâ¸öÖµ%×Ô¶¯ºÈħ FreePoint = 0 # (DWORD FreePoint ) //δ·ÖÅäµãÊý FreeSkillPoint = 0 # (DWORD FreeSkillPoint ) //δ·ÖÅäµÄ¼¼Äܵã STR = 0 # (int STR ) //Á¦Á¿ ENE = 0 # (int ENE ) //¾«Éñ AGI = 0 # (int AGI ) //Ãô½Ý CON = 0 # (int CON ) //ÌåÖÊ INT = 0 # (int INT ) //ÖÇÁ¦ LUCK = 0 # (int LUCK ) //ÐÒÔË Setting = "" # (char Setting[1000] ) //É趨 PKValue = 0 # (WORD PKValue ) //ºâÁ¿PKÄÜÁ¦µÄÒ»ÏîÊôÐÔ£¬Óɹ¥·À¼ÆËã¶øµÃ ActiveValue = 0 # (WORD ActiveValue ) //»÷ɱµÐ¹úÕóÓªÍæ¼ÒºÍNPCµÄͳ¼ÆÖµ PlayerType = 0 # (BYTE PlayerType ) //½ÇÉ«µÄÎåÐÐÊôÐÔ£¬×é¶ÓÓà 0.ÎÞÊôÐÔ 1. ½ð 2. ľ 3. Ë® 4. ÍÁ 5. »ð BackpackLV = 0 # (BYTE BackpackLV ) //±³°üµÈ¼¶ WarehouseLV = 0 # (BYTE WarehouseLV ) //²Ö¿âµÈ¼¶ TeamID = 0 # (DWORD TeamID ) //¶ÓÎéID UseGoldType = 0 # (BYTE UseGoldType ) //ĬÈÏÓýð×Ó/½ðƱ ÀàÐÍΪMoneyType UseSilverType = 0 # (BYTE UseSilverType ) //ĬÈÏÓõÄÒø×Ó/񿮱 AttackMode = 0 # (BYTE AttackMode ) //¹¥»÷ģʽ LogoffTime = "" # (char LogoffTime[30] ) //ÀëÏßʱ¼ä def __init__(self): self.Clear() self.Head.Cmd = 0x01 self.Head.SubCmd = 0x02 return def ReadData(self, _lpData, _pos=0, _Len=0): self.Clear() _pos = self.Head.ReadData(_lpData, _pos) self.AccID, _pos = CommFunc.ReadString(_lpData, _pos, 15) self.PlayerID, _pos = CommFunc.ReadDWORD(_lpData, _pos) self.PlayerName, _pos = CommFunc.ReadString(_lpData, _pos, 15) self.AccState, _pos = CommFunc.ReadBYTE(_lpData, _pos) self.GMLevel, _pos = CommFunc.ReadBYTE(_lpData, _pos) self.Sex, _pos = CommFunc.ReadDWORD(_lpData, _pos) self.Hair, _pos = CommFunc.ReadDWORD(_lpData, _pos) self.HairColor, _pos = CommFunc.ReadDWORD(_lpData, _pos) self.Face, _pos = CommFunc.ReadDWORD(_lpData, _pos) self.Job, _pos = CommFunc.ReadDWORD(_lpData, _pos) self.LV, _pos = CommFunc.ReadDWORD(_lpData, _pos) self.TotalExp, _pos = CommFunc.ReadDWORD(_lpData, _pos) self.Family, _pos = CommFunc.ReadDWORD(_lpData, _pos) self.Country, _pos = CommFunc.ReadDWORD(_lpData, _pos) self.HornorKill, _pos = CommFunc.ReadDWORD(_lpData, _pos) self.Hornor, _pos = CommFunc.ReadDWORD(_lpData, _pos) self.HornorInFamily, _pos = CommFunc.ReadDWORD(_lpData, _pos) self.HornorInCountry, _pos = CommFunc.ReadDWORD(_lpData, _pos) self.Mate, _pos = CommFunc.ReadDWORD(_lpData, _pos) self.Gold, _pos = CommFunc.ReadDWORD(_lpData, _pos) self.GoldPaper, _pos = CommFunc.ReadDWORD(_lpData, _pos) self.Silver, _pos = CommFunc.ReadDWORD(_lpData, _pos) self.SilverPaper, _pos = CommFunc.ReadDWORD(_lpData, _pos) self.FightPoint, _pos = CommFunc.ReadDWORD(_lpData, _pos) self.HappyPoint, _pos = CommFunc.ReadDWORD(_lpData, _pos) self.MapID, _pos = CommFunc.ReadDWORD(_lpData, _pos) self.PosX, _pos = CommFunc.ReadDWORD(_lpData, _pos) self.PosY, _pos = CommFunc.ReadDWORD(_lpData, _pos) self.State, _pos = CommFunc.ReadDWORD(_lpData, _pos) self.HP, _pos = CommFunc.ReadDWORD(_lpData, _pos) self.MP, _pos = CommFunc.ReadDWORD(_lpData, _pos) self.HPRestoreSetting, _pos = CommFunc.ReadWORD(_lpData, _pos) self.MPRestoreSetting, _pos = CommFunc.ReadWORD(_lpData, _pos) self.FreePoint, _pos = CommFunc.ReadDWORD(_lpData, _pos) self.FreeSkillPoint, _pos = CommFunc.ReadDWORD(_lpData, _pos) self.STR, _pos = CommFunc.ReadDWORD(_lpData, _pos) self.ENE, _pos = CommFunc.ReadDWORD(_lpData, _pos) self.AGI, _pos = CommFunc.ReadDWORD(_lpData, _pos) self.CON, _pos = CommFunc.ReadDWORD(_lpData, _pos) self.INT, _pos = CommFunc.ReadDWORD(_lpData, _pos) self.LUCK, _pos = CommFunc.ReadDWORD(_lpData, _pos) self.Setting, _pos = CommFunc.ReadString(_lpData, _pos, 1000) self.PKValue, _pos = CommFunc.ReadWORD(_lpData, _pos) self.ActiveValue, _pos = CommFunc.ReadWORD(_lpData, _pos) self.PlayerType, _pos = CommFunc.ReadBYTE(_lpData, _pos) self.BackpackLV, _pos = CommFunc.ReadBYTE(_lpData, _pos) self.WarehouseLV, _pos = CommFunc.ReadBYTE(_lpData, _pos) self.TeamID, _pos = CommFunc.ReadDWORD(_lpData, _pos) self.UseGoldType, _pos = CommFunc.ReadBYTE(_lpData, _pos) self.UseSilverType, _pos = CommFunc.ReadBYTE(_lpData, _pos) self.AttackMode, _pos = CommFunc.ReadBYTE(_lpData, _pos) self.LogoffTime, _pos = CommFunc.ReadString(_lpData, _pos, 30) if _Len != 0 and _pos != _Len: Log4P.Warn("Error in tagCDBPlayer : %s "% binascii.b2a_hex(_lpData)) return 0 return _pos def Clear(self): self.Head = tagHead() self.Head.Clear() self.AccID = "" self.PlayerID = 0 self.PlayerName = "" self.AccState = 0 self.GMLevel = 0 self.Sex = 0 self.Hair = 0 self.HairColor = 0 self.Face = 0 self.Job = 0 self.LV = 0 self.TotalExp = 0 self.Family = 0 self.Country = 0 self.HornorKill = 0 self.Hornor = 0 self.HornorInFamily = 0 self.HornorInCountry = 0 self.Mate = 0 self.Gold = 0 self.GoldPaper = 0 self.Silver = 0 self.SilverPaper = 0 self.FightPoint = 0 self.HappyPoint = 0 self.MapID = 0 self.PosX = 0 self.PosY = 0 self.State = 0 self.HP = 0 self.MP = 0 self.HPRestoreSetting = 0 self.MPRestoreSetting = 0 self.FreePoint = 0 self.FreeSkillPoint = 0 self.STR = 0 self.ENE = 0 self.AGI = 0 self.CON = 0 self.INT = 0 self.LUCK = 0 self.Setting = "" self.PKValue = 0 self.ActiveValue = 0 self.PlayerType = 0 self.BackpackLV = 0 self.WarehouseLV = 0 self.TeamID = 0 self.UseGoldType = 0 self.UseSilverType = 0 self.AttackMode = 0 self.LogoffTime = "" return def GetLength(self): length = 0 length += self.Head.GetLength(); length += 15; length += 4 length += 15; length += 1 length += 1 length += 4 length += 4 length += 4 length += 4 length += 4 length += 4 length += 4 length += 4 length += 4 length += 4 length += 4 length += 4 length += 4 length += 4 length += 4 length += 4 length += 4 length += 4 length += 4 length += 4 length += 4 length += 4 length += 4 length += 4 length += 4 length += 4 length += 2 length += 2 length += 4 length += 4 length += 4 length += 4 length += 4 length += 4 length += 4 length += 4 length += 1000; length += 2 length += 2 length += 1 length += 1 length += 1 length += 4 length += 1 length += 1 length += 1 length += 30; return length; def GetBuffer(self): data = '' data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer()) data = CommFunc.WriteString(data, 15, self.AccID) data = CommFunc.WriteDWORD(data, self.PlayerID) data = CommFunc.WriteString(data, 15, self.PlayerName) data = CommFunc.WriteBYTE(data, self.AccState) data = CommFunc.WriteBYTE(data, self.GMLevel) data = CommFunc.WriteDWORD(data, self.Sex) data = CommFunc.WriteDWORD(data, self.Hair) data = CommFunc.WriteDWORD(data, self.HairColor) data = CommFunc.WriteDWORD(data, self.Face) data = CommFunc.WriteDWORD(data, self.Job) data = CommFunc.WriteDWORD(data, self.LV) data = CommFunc.WriteDWORD(data, self.TotalExp) data = CommFunc.WriteDWORD(data, self.Family) data = CommFunc.WriteDWORD(data, self.Country) data = CommFunc.WriteDWORD(data, self.HornorKill) data = CommFunc.WriteDWORD(data, self.Hornor) data = CommFunc.WriteDWORD(data, self.HornorInFamily) data = CommFunc.WriteDWORD(data, self.HornorInCountry) data = CommFunc.WriteDWORD(data, self.Mate) data = CommFunc.WriteDWORD(data, self.Gold) data = CommFunc.WriteDWORD(data, self.GoldPaper) data = CommFunc.WriteDWORD(data, self.Silver) data = CommFunc.WriteDWORD(data, self.SilverPaper) data = CommFunc.WriteDWORD(data, self.FightPoint) data = CommFunc.WriteDWORD(data, self.HappyPoint) data = CommFunc.WriteDWORD(data, self.MapID) data = CommFunc.WriteDWORD(data, self.PosX) data = CommFunc.WriteDWORD(data, self.PosY) data = CommFunc.WriteDWORD(data, self.State) data = CommFunc.WriteDWORD(data, self.HP) data = CommFunc.WriteDWORD(data, self.MP) data = CommFunc.WriteWORD(data, self.HPRestoreSetting) data = CommFunc.WriteWORD(data, self.MPRestoreSetting) data = CommFunc.WriteDWORD(data, self.FreePoint) data = CommFunc.WriteDWORD(data, self.FreeSkillPoint) data = CommFunc.WriteDWORD(data, self.STR) data = CommFunc.WriteDWORD(data, self.ENE) data = CommFunc.WriteDWORD(data, self.AGI) data = CommFunc.WriteDWORD(data, self.CON) data = CommFunc.WriteDWORD(data, self.INT) data = CommFunc.WriteDWORD(data, self.LUCK) data = CommFunc.WriteString(data, 1000, self.Setting) data = CommFunc.WriteWORD(data, self.PKValue) data = CommFunc.WriteWORD(data, self.ActiveValue) data = CommFunc.WriteBYTE(data, self.PlayerType) data = CommFunc.WriteBYTE(data, self.BackpackLV) data = CommFunc.WriteBYTE(data, self.WarehouseLV) data = CommFunc.WriteDWORD(data, self.TeamID) data = CommFunc.WriteBYTE(data, self.UseGoldType) data = CommFunc.WriteBYTE(data, self.UseSilverType) data = CommFunc.WriteBYTE(data, self.AttackMode) data = CommFunc.WriteString(data, 30, self.LogoffTime) return data def OutputString(self): DumpString = '''//01 02 Íæ¼Ò³õʼ»¯#tagCDBPlayer: Head:%s, AccID:%s, PlayerID:%d, PlayerName:%s, AccState:%d, GMLevel:%d, Sex:%d, Hair:%d, HairColor:%d, Face:%d, Job:%d, LV:%d, TotalExp:%d, Family:%d, Country:%d, HornorKill:%d, Hornor:%d, HornorInFamily:%d, HornorInCountry:%d, Mate:%d, Gold:%d, GoldPaper:%d, Silver:%d, SilverPaper:%d, FightPoint:%d, HappyPoint:%d, MapID:%d, PosX:%d, PosY:%d, State:%d, HP:%d, MP:%d, HPRestoreSetting:%d, MPRestoreSetting:%d, FreePoint:%d, FreeSkillPoint:%d, STR:%d, ENE:%d, AGI:%d, CON:%d, INT:%d, LUCK:%d, Setting:%s, PKValue:%d, ActiveValue:%d, PlayerType:%d, BackpackLV:%d, WarehouseLV:%d, TeamID:%d, UseGoldType:%d, UseSilverType:%d, AttackMode:%d, LogoffTime:%s '''\ %( self.Head.OutputString(), self.AccID, self.PlayerID, self.PlayerName, self.AccState, self.GMLevel, self.Sex, self.Hair, self.HairColor, self.Face, self.Job, self.LV, self.TotalExp, self.Family, self.Country, self.HornorKill, self.Hornor, self.HornorInFamily, self.HornorInCountry, self.Mate, self.Gold, self.GoldPaper, self.Silver, self.SilverPaper, self.FightPoint, self.HappyPoint, self.MapID, self.PosX, self.PosY, self.State, self.HP, self.MP, self.HPRestoreSetting, self.MPRestoreSetting, self.FreePoint, self.FreeSkillPoint, self.STR, self.ENE, self.AGI, self.CON, self.INT, self.LUCK, self.Setting, self.PKValue, self.ActiveValue, self.PlayerType, self.BackpackLV, self.WarehouseLV, self.TeamID, self.UseGoldType, self.UseSilverType, self.AttackMode, self.LogoffTime ) return DumpString abc = tagCDBPlayer() abc.PlayerName = "fuck" buf = abc.GetBuffer() ccc = tagCDBPlayer() ccc.ReadData(buf) print ccc.PlayerName print binascii.b2a_hex(buf) print abc.OutputString()